<?php

namespace app\admin\model\course;

use think\Model;


class UserCoupon extends Model
{





    // 表名
    protected $name = 'user_coupon';

    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';
    protected $deleteTime = false;

    // 追加属性
    protected $append = [
        'start_time_text',
        'end_time_text',
    ];

    protected function setStartTimeAttr($value)
    {
        return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
    }

    protected function setEndTimeAttr($value)
    {
        return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
    }

    public function getStartTimeTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['start_time']) ? $data['start_time'] : '');
        return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
    }

    public function getEndTimeTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['end_time']) ? $data['end_time'] : '');
        return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
    }






    public function user()
    {
        return $this->belongsTo('app\admin\model\User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
    }


    public function coupon()
    {
        return $this->belongsTo('app\admin\model\course\Coupon', 'coupon_id', 'id', [], 'LEFT')->setEagerlyType(0);
    }

    public function checkUserCoupon($coupon_id,$user_id, $is_pay = false){
        $where = [];
        //不是支付的话 查询下 人和时间
        if(!$is_pay){
            $where['user_id'] = $user_id;
            $where['start_time'] = ["<",time()];
            $where['end_time'] = [">",time()];
        }
        $couponInfo = UserCoupon::where("id", $coupon_id)
            ->where($where)
            ->find();
        if(!$couponInfo){
            exception("未找到该优惠券");
        }
        if($couponInfo['status'] != Coupon::STATUS_SEND && !$is_pay){
            exception("优惠券已使用");
        }

        return $couponInfo;
    }


    //核销优惠券
    public function verifyUserCoupon($id){
        $info = $this->where("id",$id)->find();
        if(!$info){
            exception("未找到当前优惠券");
        }
        //检测下时间
        if($info['end_time'] < time()){
            exception("当前优惠券已失效");
        }
        if($info['status'] == Coupon::STATUS_USE){
            exception("当前优惠券已被使用");
        }
        $info->save([
            "status" => Coupon::STATUS_USE
        ]);
    }
}
